import axios from 'axios';
import ReturnResult from '../utils/ReturnResult';

/**
 * 购物车相关服务
 */
class CartService {

    /**
     * 获取购物车商品数量
     * @returns 商品数量
     */
    async getCartCount() {
        try {
            const resp = await axios.get('/cart/count');
            return resp.data;
        } catch (err) {
            console.error(err);
        }
        return 0;
    }

    /**
     * 获取购物车
     * @returns 购物车
     */
    async getCart() {
        try {
            const resp = await axios.get('/cart');
            return resp.data;
        } catch (err) {
            console.error(err);
        }
        return null;
    }
    
    /** 
     * 添加商品到购物车
     * @param {number} bookId 商品id
     */
    async add(bookId) {
        try {
            const resp = await axios.post('/cart/' + bookId);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.from('添加失败');
    }

    /**
     * 修改商品数量
     * @param {number} id 商品id
     * @param {number} count 商品数量
     * @returns {Promise<ReturnResult>} 修改结果
     */
    async updateCount(id, count) {
        const data = new FormData();
        data.append('id', id);
        data.append('count', count);
        try {
            const resp = await axios.put('/cart', data);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.from('添加失败');
    }

    /**
     * 清空购物车
     */
    async clearCart() {
        try {
            const resp = await axios.delete('/cart');
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.from('购物车清空失败');
    }

    /**
     * 从购物车中删除商品
     * @param {number} id 商品id
     * @returns 删除结果
     */
    async deleteCartItem(id) {
        try {
            const resp = await axios.delete('/cart/' + id);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.from('商品删除失败');
    }
}

export default new CartService();